% visualize_pareto_front.m
% 绘制帕累托前沿散点图，并高亮显示关键解。
function visualize_pareto_front(pareto_front, best_time_sol, best_spill_sol, best_tradeoff_sol, output_dir, case_name)
    
    fprintf('  绘制帕累托最优前沿图...\n');
    
    % 提取所有解的数据
    times = [pareto_front.time];
    spills = [pareto_front.spill];
    
    % 创建新图窗
    fig = figure('Name', '帕累托最优前沿 (Pareto Front)', 'Visible', 'off');
    hold on;
    
    % 绘制所有前沿解
    scatter(times, spills, 36, 'b', 'filled', 'DisplayName', '帕累托前沿解');
    
    % 高亮显示关键解
    scatter(best_time_sol.time, best_time_sol.spill, 100, 'r', 'filled', 'DisplayName', '最优时间解');
    scatter(best_spill_sol.time, best_spill_sol.spill, 100, 'g', 'filled', 'DisplayName', '最优Spill解');
    scatter(best_tradeoff_sol.time, best_tradeoff_sol.spill, 100, 'm', 'p', 'filled', 'DisplayName', '最优折中解');
    
    % 添加图表元素
    title(['帕累托最优前沿 - ' case_name]);
    xlabel('总执行时间 (Total Execution Time)');
    ylabel('总额外数据搬运量 (Total Spill Volume)');
    grid on;
    legend('show', 'Location', 'best');
    hold off;
    
    % 保存图表
    saveas(fig, fullfile(output_dir, [case_name, '_pareto_front.png']));
    fprintf('  总览图已保存至: %s\n', fullfile(output_dir, [case_name, '_pareto_front.png']));
    close(fig);
end